﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using RamaSoft.Common;
using ComponentFactory.Krypton.Toolkit;

namespace RamaSoft.CtlPatrim
{
    public partial class Tabelas : KryptonForm
    {
        Database myDBase;
        public static string Ação;
        string qTipo = "";
        int qCode, qRow;

        public Tabelas(Database myDBase)
        {
            InitializeComponent();
            this.myDBase = myDBase;
        }

        private void Form_Load(object sender, EventArgs e)
        {
            if (Ação == "Catego")
            {
                qTipo = "C";
                titTipo.Text = "Categorias";
            }
            else if (Ação == "Motivo")
            {
                qTipo = "M";
                titTipo.Text = "Motivos";
            }
            else
            {
                qTipo = "D";
                titTipo.Text = "Departamentos";
            }
            cadsGerais rolGeral = new cadsGerais(myDBase);
            rolGeral.Tipo = qTipo;
            int dbRet = rolGeral.Lista();
            if (dbRet != 0)
            {
                MessageBox.Show("Favor avisar a RamaSoft\n"
                    + "referência: " + this.Name + " LoadGeral\n" + rolGeral.MsgErro,
                    "Erro no acesso ao Banco de Dados", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            for (int ix = 0; ix < rolGeral.Items.Count; ix++)
            {
                listaDados.Rows.Add(rolGeral.Items[ix].Código.ToString(), rolGeral.Items[ix].Descrição.Trim());  
            }
            listaDados.Sort(colDescr, ListSortDirection.Ascending);
            listaDados.CurrentCell.Selected = false;
        }

        private void listaDados_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Escape) listaDados_DoubleClick(null, null);
        }

        private void listaDados_DoubleClick(object sender, EventArgs e)
        {
            qRow = listaDados.CurrentRow.Index;
            if (qRow < 0) return;
            qCode = Convert.ToInt32(listaDados.Rows[qRow].Cells[0].Value);
            txDado.Text = listaDados.Rows[qRow].Cells[1].Value.ToString();
            janAlter.Visible = true;
            janAlter.Text = "alterar para";
            txDado.Focus();
            menuExcluir.Enabled = true;
        }

        private void txDado_TextChanged(object sender, EventArgs e)
        {
            if (txDado.Text.Trim().Length > 4) cmdOK.Enabled = true;
            else cmdOK.Enabled = false;
        }

        private void txDado_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Enter) cmdOK.Focus();
        }

        private void cmdOK_Click(object sender, EventArgs e)
        {
            cadGeral regGeral = new cadGeral (myDBase );
            regGeral .Tipo = qTipo; 
            regGeral.Descrição = txDado.Text ;
            int dbRet;
            if (qCode > 0)
            {
                regGeral.Código = qCode;
                dbRet = regGeral.Update();
            }
            else dbRet = regGeral.Insert();
            if (dbRet != 0)
            {
                MessageBox.Show("Favor avisar a RamaSoft\n"
                    + "referência: " + this.Name + " OKGeral\n" + regGeral.MsgErro,
                    "Erro no acesso ao Banco de Dados", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            if (qCode > 0) listaDados.Rows[qRow].Cells[1].Value = txDado.Text.Trim();
            else listaDados.Rows.Add(regGeral.Código.ToString(), txDado.Text.Trim());
            listaDados.Sort(colDescr, ListSortDirection.Ascending);
            listaDados.CurrentCell.Selected = false;
            infoOK.Visible = true;
            Pulso.Enabled = true;
        }

        private void Pulso_Tick(object sender, EventArgs e)
        {
            Pulso.Enabled = false;
            infoOK.Visible = false;
            janAlter.Visible = false;
            menuExcluir.Enabled = false;
        }

        private void menuNovo_Click(object sender, EventArgs e)
        {
            janAlter.Text = "Novo";
            janAlter.Visible = true;
            txDado.Text = "";
            txDado.Focus();
            qCode = 0;
        }

        private void menuExcluir_Click(object sender, EventArgs e)
        {
            DialogResult resp = MessageBox.Show("Você confirma a exclusão de:\n"
                + txDado.Text + "?", "Excluir", MessageBoxButtons.YesNo, MessageBoxIcon.Question,
                MessageBoxDefaultButton.Button2);
            if (resp == DialogResult.No) return;
            Bem regBem = new Bem(myDBase);
            string edição;
            int dbRet;
            if (qTipo != "M")
            {
                if (qTipo == "C")
                {
                    edição = "esta Categoria";
                    regBem.Categoria = qCode;
                    dbRet = regBem.UsaCateg();
                }
                else
                {
                    edição = "este Departamento";
                    regBem.Departamento = qCode;
                    dbRet = regBem.UsaDepto();
                }
                if (dbRet > 1)
                {
                    MessageBox.Show("Favor avisar a RamaSoft\n"
                        + "referência: " + this.Name + " UsoGeral\n" + regBem.MsgErro,
                        "Erro no acesso ao Banco de Dados", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                if (dbRet != 0)
                {
                    MessageBox.Show("Não é possível excluir: " + txDado.Text
                    + "\n\npois, alguns itens fazem referência a " + edição, "   Excluir");
                    return;
                }
            }
            cadGeral regGeral = new cadGeral(myDBase);
            regGeral.Tipo = qTipo;
            regGeral.Código = qCode;
            dbRet = regGeral.Delete();
            if (dbRet != 0)
            {
                MessageBox.Show("Favor avisar a RamaSoft\n"
                    + "referência: " + this.Name + " ExcloGeral\n" + regGeral.MsgErro,
                    "Erro no acesso ao Banco de Dados", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            listaDados.Rows.RemoveAt(qRow);
            infoOK.Visible = true;
            Pulso.Enabled = true;
        }
    }
}
